# @Time    : 2022/8/22 16:05
# @Author  : 南黎
# @FileName: 8.延时等待.py
#在我们上一课7.键盘键位操作中提到过，没有延时可能会导致连续动作执行失败
import win32gui
import win32api
import win32con
# 注意窗口句柄获取如果失败，要做好异常处理
try:
    # 获取窗口句柄
    handle = win32gui.FindWindowEx(0, 0, "Notepad", None)#桌面窗口的所有子窗口检索类名"Edit"，标题为None的窗口
    print("窗口句柄是：{}".format(handle))

    # 设置窗口
    # 参数：句柄，窗口左边界，窗口上边界，窗口宽度，窗口高度，确定窗口是否被刷新
    win32gui.MoveWindow(handle, 0, 0, 500, 500, True)
    # 设置窗口后获取窗口信息，查看是否设置成功
    handleMessage = win32gui.GetWindowRect(handle)#通过窗口句柄获取窗口信息
    print("修改窗口后的窗口 x,y坐标，还有宽度，高度是：{}".format(handleMessage))

    # 将创建指定窗口的线程设置到前台，并且激活该窗口
    win32gui.SetForegroundWindow(handle)
    #加入延时，否则可能会操作失败
    print("如果没有下面以这一行代码，可能无法正常输入A B 字母，这就是延时等待的作用")
    win32api.Sleep(1000)

    #激活窗口输入栏
    # 模拟鼠标在(246,217)位置进行点击操作
    point = (246,217)
    win32api.SetCursorPos(point)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)#按下鼠标左键
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)#松开鼠标左键

    #加入延时，否则可能会操作失败
    print("如果没有下面以这一行代码，可能无法正常输入A B 字母，这就是延时等待的作用")
    win32api.Sleep(1000)

    #在记事本中输入A B 字母
    win32api.keybd_event(65, 0, 0, 0)#按下A
    win32api.keybd_event(66, 0, 0, 0)#按下B
    win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)#松开A
    win32api.keybd_event(66, 0, win32con.KEYEVENTF_KEYUP, 0)#松开B

except Exception as e:
    print("错误：{}".format(e))



# time_need = 5  # 等待时间是5秒
# #创建等待计时器
# # 1.为对象指定继承和安全描述符，或默认为None
# # 2.是否手动重置：布尔True用于手动重置计时器，或False用于创建同步计时器
# # 3.计时器名称：str，计时器对象名称，或无
# win32event .CreateWaitableTimer(None, True, "myTimer")
# # 设置等待计时器
# #参数分别表示 句柄=handle 计时器到期时间=0 定时器间隔=time_need*1000 功能：对象None 参数：对象None 恢复状态 =False
# win32event.SetWaitableTimer(handle, 0, time_need*1000, None, None, True)